package com.food.eat.impl;

import com.food.eat.service.FoodEatService;
import com.food.eat.service.TranctionTestService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

/**
 * @Author:RenPu
 * @Date: 2020/7/19 0:04
 * @Version: 1.0
 * @description:
 */

@Service
public class TranctionTestServiceImpl implements TranctionTestService {


    /**
     * 事务的传播属性---->
     * REQUIRED: 使用当前的事务，如果当前没有事务，责自己创建一个事务，
     * 子方法必须运行在一个事务中的，如果当前有事务则进行加入成为一个整体、
     * 例子：领导没有饭吃，我有钱，我会自己买了自己吃，领导有的吃，则会分给你吃
     * SUPPORTS: 如果当前有事务，则使用当前事务，如果当前没有事务，则不使用事务
     * 例子：领导没有饭吃，我也没饭吃，领导有饭吃，我也有饭吃
     * MANDATORY: 强制必须有一个事务，如果没事务支持，就抛出异常
     * 例子： 领导必须管饭，如果不管饭，我就不干了（就抛出异常）
     * REQUIRES_NEW: 如果有事务将事务挂起，自己创建一个事务给自己用
     * 例子；领导有饭吃，我偏不要，我自己买了自己吃
     * NOT_SUPPORTED: 如果用事务，则把当前事务挂起，自己不使用事务去操作数据库
     * 例子：领导有饭吃，分给你一点，你太忙了，放一边，你不吃
     * NEVER: 不允许事务，有事务就报异常
     * 例子： 领导有饭吃，分给你吃，你太忙了，你热爱工作
     * NESTED:
     * 例子：领导犯错了，惩罚我，我犯错了，领导甩锅给我
     */

    @Resource
    private FoodEatService foodEatService;


    //@Transactional(propagation = Propagation.REQUIRED)
    @Override
    public void testPropagationTranction() {

        foodEatService.saveParent();

        foodEatService.saveChildren();

        //int a=1/0;


    }
}
